{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import fetch_lfw_people\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import classification_report, confusion_matrix, accuracy_score\n",
    "from time import time\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# load the dataset\n",
    "# the optional parameter: min_faces_per_person: \n",
    "# will only retain pictures of people that have at least min_faces_per_person different pictures.\n",
    "# the optional parameter: resize is the ratio used to resize the each face picture.\n",
    "lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1288, 50, 37)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# introspect the images arrays to find the shapes (for plotting)\n",
    "n_samples, h, w = lfw_people.images.shape\n",
    "n_samples, h, w"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# for machine learning we use the data directly (as relative pixel\n",
    "# positions info is ignored by this model)\n",
    "X = lfw_people.data\n",
    "y = lfw_people.target\n",
    "n_features = X.shape[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1288, 1850)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Hugo Chavez'"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot one of the faces\n",
    "plt.imshow(X[0].reshape((h, w)), cmap=plt.cm.gray)\n",
    "lfw_people.target_names[y[0]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Hugo Chavez'"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot one of the faces after applying a scaling modujle\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "plt.imshow(StandardScaler().fit_transform(X)[0].reshape((h, w)), cmap=plt.cm.gray)\n",
    "lfw_people.target_names[y[0]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total dataset size:\n",
      "n_samples: 1288\n",
      "n_features: 1850\n",
      "n_classes: 7\n"
     ]
    }
   ],
   "source": [
    "# the label to predict is the id of the person\n",
    "target_names = lfw_people.target_names\n",
    "n_classes = target_names.shape[0]\n",
    "\n",
    "print(\"Total dataset size:\")\n",
    "print(\"n_samples: %d\" % n_samples)\n",
    "print(\"n_features: %d\" % n_features)\n",
    "print(\"n_classes: %d\" % n_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "# let's split our dataset into training and testing\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting the top 200 eigenfaces from 966 faces\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\"\"\"\n",
    "Compute a PCA (eigenfaces) on the face dataset \n",
    "\n",
    "from sklearn docs:\n",
    "The optional parameter whiten=True makes it possible to project the data onto the singular space \n",
    "while scaling each component to unit variance. This is often useful if the models down-stream make strong \n",
    "assumptions on the isotropy of the signal: this is for example the case for \n",
    "Support Vector Machines with the RBF kernel and the K-Means clustering algorithm.\n",
    "\"\"\"\n",
    "\n",
    "# instantiate the PCA module\n",
    "pca = PCA(n_components=200, whiten=True)\n",
    "\n",
    "# create a pipeline called preprocessing that will scale data and then apply PCA\n",
    "preprocessing = Pipeline([('scale', StandardScaler()), ('pca', pca)])\n",
    "\n",
    "print(\"Extracting the top %d eigenfaces from %d faces\" % (200, X_train.shape[0]))\n",
    "\n",
    "# fit the pipeline to the training set\n",
    "preprocessing.fit(X_train)\n",
    "\n",
    "# grab the PCA from the pipeline\n",
    "extracted_pca = preprocessing.steps[1][1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a1d3f8d50>]"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Scree Plot\n",
    "\n",
    "plt.plot(np.cumsum(extracted_pca.explained_variance_ratio_))\n",
    "\n",
    "# starting at 100 components captures over 90% of the variance compared to the 1,850 original features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x650.88 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "comp = extracted_pca.components_\n",
    "image_shape = (h, w)\n",
    "def plot_gallery(title, images, n_col, n_row):\n",
    "    plt.figure(figsize=(2. * n_col, 2.26 * n_row))\n",
    "    plt.suptitle(title, size=16)\n",
    "    for i, comp in enumerate(images):\n",
    "        plt.subplot(n_row, n_col, i + 1)\n",
    "        vmax = max(comp.max(), -comp.min())\n",
    "        plt.imshow(comp.reshape(image_shape), cmap=plt.cm.gray,            \n",
    "                   vmin=-vmax, vmax=vmax)\n",
    "        plt.xticks(())\n",
    "        plt.yticks(())\n",
    "    plt.subplots_adjust(0.01, 0.05, 0.99, 0.93, 0.04, 0.)\n",
    "    plt.show()    \n",
    "plot_gallery('PCA componenets', comp[:16], 4,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "import itertools\n",
    "def plot_confusion_matrix(cm, classes,\n",
    "                          normalize=False,\n",
    "                          title='Confusion matrix',\n",
    "                          cmap=plt.cm.Blues):\n",
    "    \"\"\"\n",
    "    This function prints a more readable confusion matrix with heat labels and options for noramlization\n",
    "    Normalization can be applied by setting `normalize=True`.\n",
    "    \"\"\"\n",
    "    plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
    "    plt.title(title)\n",
    "    plt.colorbar()\n",
    "    tick_marks = np.arange(len(classes))\n",
    "    plt.xticks(tick_marks, classes, rotation=45)\n",
    "    plt.yticks(tick_marks, classes)\n",
    "\n",
    "    thresh = cm.max() / 2.\n",
    "    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
    "        plt.text(j, i, cm[i, j],\n",
    "                 horizontalalignment=\"center\",\n",
    "                 color=\"white\" if cm[i, j] > thresh else \"black\")\n",
    "    plt.ylabel('True label')\n",
    "    plt.xlabel('Predicted label')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/model_selection/_split.py:1978: FutureWarning: The default value of cv will change from 3 to 5 in version 0.22. Specify it explicitly to silence this warning.\n",
      "  warnings.warn(CV_WARNING, FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/super/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
      "  \"this warning.\", FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# fit without using PCA to see what the difference will be\n",
    "t0 = time()\n",
    "logreg = LogisticRegression()\n",
    "\n",
    "param_grid = {'C': [1e-2, 1e-1,1e0,1e1, 1e2]}\n",
    "clf = GridSearchCV(logreg, param_grid)\n",
    "clf = clf.fit(X_train, y_train)\n",
    "best_clf = clf.best_estimator_\n",
    "\n",
    "# Predicting people's names on the test set\n",
    "y_pred = best_clf.predict(X_test)\n",
    "\n",
    "# print((accuracy_score(y_pred, y_test), \"Accuracy score for best estimator\")\n",
    "# #classification_report(y_test, y_pred, target_names=target_names)\n",
    "# print(plot_confusion_matrix(confusion_matrix(y_test, y_pred, labels=range(n_classes)), target_names))\n",
    "# print(round((time() - t0), 1), \"seconds to grid search and predict the test set\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# fit with using PCA to see what the difference will be\n",
    "t0 = time()\n",
    "\n",
    "face_pipeline = Pipeline(steps=[('PCA', PCA(n_components=200)), ('logistic', logreg)])\n",
    "\n",
    "pipe_param_grid = {'logistic__C': [1e-2, 1e-1,1e0,1e1, 1e2]}\n",
    "clf = GridSearchCV(face_pipeline, pipe_param_grid)\n",
    "clf = clf.fit(X_train, y_train)\n",
    "best_clf = clf.best_estimator_\n",
    "\n",
    "# Predicting people's names on the test set\n",
    "y_pred = best_clf.predict(X_test)\n",
    "\n",
    "print accuracy_score(y_pred, y_test), \"Accuracy score for best estimator\"\n",
    "print(classification_report(y_test, y_pred, target_names=target_names))\n",
    "print plot_confusion_matrix(confusion_matrix(y_test, y_pred, labels=range(n_classes)), target_names)\n",
    "print round((time() - t0), 1), \"seconds to grid search and predict the test set\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get a list of predicted names and true names to plot with faces in test set\n",
    "prediction_titles = [title(y_pred, y_test, target_names, i)\n",
    "                     for i in range(y_pred.shape[0])]\n",
    "\n",
    "# splot a sample of the test set with predicted and true names\n",
    "plot_gallery(X_test, prediction_titles, h, w)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_best_model_and_accuracy(model, params, X, y):\n",
    "    grid = GridSearchCV(model,           # the model to grid search\n",
    "                        params,          # the parameter set to try \n",
    "                        error_score=0.)  # if a parameter set raises an error, continue and set the performance as a big, fat 0\n",
    "    grid.fit(X, y)           # fit the model and parameters\n",
    "    # our classical metric for performance\n",
    "    print \"Best Accuracy: {}\".format(grid.best_score_)\n",
    "    # the best parameters that caused the best accuracy\n",
    "    print \"Best Parameters: {}\".format(grid.best_params_)\n",
    "    # the average time it took a model to fit to the data (in seconds)\n",
    "    print \"Average Time to Fit (s): {}\".format(round(grid.cv_results_['mean_fit_time'].mean(), 3))\n",
    "    # the average time it took a model to predict out of sample data (in seconds)\n",
    "    # this metric gives us insight into how this model will perform in real-time analysis\n",
    "    print \"Average Time to Score (s): {}\".format(round(grid.cv_results_['mean_score_time'].mean(), 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a larger pipeline to gridsearch\n",
    "face_params = {'logistic__C':[1e-2, 1e-1, 1e0, 1e1, 1e2], \n",
    "               'preprocessing__pca__n_components':[100, 150, 200, 250, 300],\n",
    "               'preprocessing__pca__whiten':[True, False],\n",
    "               'preprocessing__lda__n_components':range(1, 7)  \n",
    "               # [1, 2, 3, 4, 5, 6] recall the max allowed is n_classes-1\n",
    "              }\n",
    "\n",
    "pca = PCA()\n",
    "lda = LinearDiscriminantAnalysis()\n",
    "\n",
    "preprocessing = Pipeline([('scale', StandardScaler()), ('pca', pca), ('lda', lda)])\n",
    "\n",
    "logreg = LogisticRegression()\n",
    "face_pipeline = Pipeline(steps=[('preprocessing', preprocessing), ('logistic', logreg)])\n",
    "\n",
    "get_best_model_and_accuracy(face_pipeline, face_params, X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neural_network import BernoulliRBM\n",
    "from sklearn.preprocessing import MinMaxScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "extracted_rbm.components_.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# instantiate the PCA module\n",
    "rbm = BernoulliRBM(n_components=200, learning_rate=0.01, batch_size=10, n_iter=200, verbose=True)\n",
    "\n",
    "# create a pipeline called preprocessing that will scale data and then apply PCA\n",
    "preprocessing = Pipeline([('minmax', MinMaxScaler()), ('rbm', rbm)])\n",
    "\n",
    "print \"Extracting the top %d RBM-faces from %d faces\" % (200, X_train.shape[0])\n",
    "\n",
    "# fit the pipeline to the training set\n",
    "preprocessing.fit(X_train)\n",
    "\n",
    "# grab the PCA from the pipeline\n",
    "extracted_rbm = preprocessing.steps[1][1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "comp = extracted_rbm.components_\n",
    "image_shape = (h, w)\n",
    "def plot_gallery(title, images, n_col, n_row):\n",
    "    plt.figure(figsize=(2. * n_col, 2.26 * n_row))\n",
    "    plt.suptitle(title, size=16)\n",
    "    for i, comp in enumerate(images):\n",
    "        plt.subplot(n_row, n_col, i + 1)\n",
    "        vmax = max(comp.max(), -comp.min())\n",
    "        plt.imshow(comp.reshape(image_shape), cmap=plt.cm.gray,            \n",
    "                   vmin=-vmax, vmax=vmax)\n",
    "        plt.xticks(())\n",
    "        plt.yticks(())\n",
    "    plt.subplots_adjust(0.01, 0.05, 0.99, 0.93, 0.04, 0.)\n",
    "    plt.show()    \n",
    "plot_gallery('RBM componenets', comp[:16], 4,4)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
